package nancal.mp.base.config

import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.core.task.TaskExecutor
import org.springframework.scheduling.annotation.EnableAsync
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
import java.util.concurrent.ThreadPoolExecutor


@EnableAsync
@Configuration
class AsyncConfig {
    @Bean
    fun taskExecutor(): TaskExecutor {
        val executor = ThreadPoolTaskExecutor()
        // 设置核心线程数
        executor.corePoolSize = 3
        // 设置最大线程数
        executor.maxPoolSize = 10
        // 设置队列容量
        executor.queueCapacity = 20
        // 设置线程活跃时间（秒）
        executor.keepAliveSeconds = 60
        // 设置默认线程名称
        executor.threadNamePrefix = "Default-Async"
        // 设置拒绝策略
        executor.setRejectedExecutionHandler(ThreadPoolExecutor.CallerRunsPolicy())
        // 等待所有任务结束后再关闭线程池
        executor.setWaitForTasksToCompleteOnShutdown(true)
        return executor
    }
}